package com.foftact.etfrank.service;

import com.foftact.etfrank.ETFRank;

import java.util.Date;
import java.util.List;

/**
 * ETF排行服务接口
 */
public interface ETFRankService {
    /**
     * 抓取并保存ETF排行数据
     * @return 抓取并保存的数据条数
     */
    int fetchAndSaveETFRankData();

    /**
     * 抓取指定页码的ETF排行数据
     * @param pageIndex 页码
     * @param pageSize 每页大小
     * @return ETF排行数据列表
     */
    List<ETFRank> fetchETFRankDataByPage(int pageIndex, int pageSize);

    /**
     * 保存ETF排行数据
     * @param etfRank ETF排行数据
     * @return 保存结果
     */
    boolean saveETFRank(ETFRank etfRank);

    /**
     * 批量保存ETF排行数据
     * @param etfRankList ETF排行数据列表
     * @return 保存的数据条数
     */
    int saveETFRankBatch(List<ETFRank> etfRankList);

    /**
     * 根据基金代码和日期查询ETF排行数据
     * @param fundCode 基金代码
     * @param navDate 净值日期
     * @return ETF排行数据
     */
    ETFRank getETFRankByCodeAndDate(String fundCode, Date navDate);

    /**
     * 查询指定日期的ETF排行数据
     * @param navDate 净值日期
     * @return ETF排行数据列表
     */
    List<ETFRank> getETFRankByDate(Date navDate);

    /**
     * 查询最近N天的ETF排行数据
     * @param days 天数
     * @return ETF排行数据列表
     */
    List<ETFRank> getRecentETFRank(int days);

    /**
     * 查询所有ETF排行数据
     * @return ETF排行数据列表
     */
    List<ETFRank> getAllETFRank();

    /**
     * 按增长率排序查询ETF排行数据
     * @param orderByField 排序字段
     * @param orderByDirection 排序方向
     * @param limit 查询数量
     * @return ETF排行数据列表
     */
    List<ETFRank> getETFRankByGrowthRate(String orderByField, String orderByDirection, Integer limit);

    /**
     * 清理指定日期之前的ETF排行数据
     * @param date 日期
     * @return 删除的数据条数
     */
    int cleanOldETFRankData(Date date);
}